digabi_tweaksfandomcom_fi-20200214-history
Haavoittuvuudet
Suomen Kuvalehti julkaisi 8.5.2015 artikkelin , jossa kuvattiin erilaisia haavoittuvuuksia Abitti-kokeessa ja Digabi-käyttöjärjestelmässä. Haavoittuvuudet olivat palvelunestohyökkäykseen ja käynnistykseen liittyviä. Lisäksi Suomen Kuvalehti julkaisi 9.12.2016 uuden artikkelin , jossa kerrottiin, miten sähköistä ylioppilaskoetta pääsee sörkkimään ulkopuolelta. Yleistä Opiskelija pääsee virittelemään järjestelmää, vaikka sekä kone että tikku olisivat koulun puolesta.Suojautuminen vaatisi koulun toimittaman koneen ja sen kanssa kryptografiaa ja obfuskointia. BYOD-mallissa myös virtualisointi pitäisi tunnistaa ja estää varmasti. Jos kone tukee usealta tikulta käynnistämistä, voi salasanasuojatun koneen mahdollisesti pakottaa käynnistämään omalta tikulta, joka asentaa haittaohjelmat / vilpit sisään (joko koneelle tai toiselle tikulle) tai käynnistää Abitti-tikun järjestelmän muuten viritetyin asetuksin. Petri Aukian blogikirjoitus 8.5.2015 Tietoturvassa perustukset on tehtävä ensin: Kaikille on päivänselvää, että talon perustukset on rakennettava ennen seiniä ja kattoa. Täsmälleen sama koskee myös tietoturva-arkkitehtuuria. Perustuksia ei voi koskaan tehdä seinien jälkeen, eikä tietoturvaa jälkikäteen .... Tietoturva-alan ammattilaiset ovat tottuneet siihen, että järjestelmien kehittäjätiimeiltä jää huomaamatta tuhansia pikkuvirheitä. Siksi osaava arkkitehti suuunnittelee sovelluksen niin, että vain muutama kohta pitää tehdä erityisen huolella, ettei yksi tai edes kaksi yksittäistä virhettä voi kaataa koko systeemin turvallisuutta. Hyvin suunniteltuun järjestelmään on siksi vaikea hyökätä edes kesken kehitysvaiheen. Kruununjalokivet talletetaan tavalla, jossa kohdista, joihin pääsee käsiksi, ei pääse siihen, mitä suojataan. Arkkitehtuurin ja tietoturvan miettimiseen ja suunnitteluun on alussa käytettävä riittävästi aikaa. Vaikka miten olisi olevinaan kiire, niin näitä asioita ei voi siirtää myöhempiin vaiheisiin. Varoitus Älä käytä tässä kuvattuja menetelmiä missään virallisessa kokeessa! Palvelunestohyökkäys Palvelunestohyökkäys (Denial of Service, DoS) tarkoittaa verkkohyökkäystä, jossa pyritään estämään verkkosivuston, koneen tai muun resurssin tarkoitettu käyttö. Palvelunestohyökkäys voidaan tehdä monella eri tavalla. Logger-menetelmä Palvelunestohyökkäys perustuu siihen, että tavallisella käyttäjällä on kommenon logger avulla mahdollisuus kirjoittaa systeemin lokitiedostoon haluamansa tekstin. Digabin koejärjestelmä välittää kaikki opiskelijan koneen lokitiedostoihin lähetetyt viestit myös palvelinkoneen lokitiedostoihin. Palvelunestohyökkäys #!/bin/sh while [ 1 ] do logger -t DigabiOS Tähän tilalle joku pitkä teksti.... done Muokkaamalla ylläolevaa koodia niin, että logger-komennon perässä on todella pitkä pätkä tekstiä, täyttyy systeemin lokitiedosto nopeammin. Haavoittuvuuden todentamiseksi tehdyssä kokeessa käytettiin opiskelijan tikun versiota ABITTI15123 ja koetilan palvelimen tikun versiota SERVER1513D. Näitä versioita käytettäessä koetilan palvelimen muistikapasiteetti täyttyi noin 10 minuutissa ja palvelin ei pystynyt tämän jälkeen vastaanottamaan opiskelijoiden vastauksia. 4.5.2015 julkaistussa opiskelijan tikun versiossa ABITTI1519Z palvelunestohaavoittuvuutta on puolittain korjattu lisäämällä opiskelijan koneelta lähtevään verkkoliikenteeseen rajoituksia. Koetilan palvelimen päähän muutoksia ei ole tehty, ja haavoittuvuus on siten edelleen olemassa edelleen koetilan palvelimessa. 4.5. tehdyt lisäykset merkitty +++-merkinnällä rivin alkuun seuraavassa koodinpätkässä. /etc/init.d/digabi-koe if ! ${network_has_been_up} ; then date "+%T network up for the first time" >> "$stdout_log" sleep 5 sync_time dpkg-query -W 'digabi*' | tr '\n' '|' | logger -t digabi-version 2>/dev/null +++ nmcli device status | awk '/ethernet/ {print $1}' | while read dev ; do +++ tc qdisc add dev ${dev} root tbf rate 500kbit latency 100ms burst 4kb +++ done exit 0 fi Tämä korjaus kokee ainoastaan kiinteän verkon kautta toteutettua koejärjestelyä. Mikäli koetilanteessa käytetään langatonta verkkoa (WLAN), palvelunestohyökkäys voidaan tehdä Suomen Kuvalehden esittämällä tavalla. Opiskelijan koneen lähtevään liikenteen rajoitukset saadaan pois käytöstä komennolla tc qdisc del root dev eth0, mutta tämän suorittaminen vaatii ylläpitäjän oikeuksia. Langallisen lähiverkon toiminnan pysäyttäminen Langallisen lähiverkon liikenne voidaan halvaannuttaa yksinkertaisella kytkennällä. Kiitokset tästä ideasta ylilauta.org-sivustolle! GRUB2-haavoittuvuus Facebook-keskustelussa J-M Mäkelä esittää, että Digabi-järjestemä voidaan käynnistää haavoittuneesti joko väärän käyttöjärjestelmän ytimen tai väärän initrd-tiedoston avulla. Tuossa oleellista on huomata, että GRUB siis mahdollistaa käynnistämisen eri käyttöjärjestelmään. Esim. käyttäjän omaan. Tässä ei sinänsä ole ongelmaa. Ongelma on siinä, että käyttäjä voi siirtää omaa dataa hiekkalaatikon sisään tai käynnistää hiekkalaatikoidun käyttiksen omilla säädöillään. Tietoturvatermein malicious host -ongelma. Linux voidaan käynnistää niin, että esim. käytetään koulun tarjoamaa kerneliä, mutta käynnistetään oma init-ohjelma, jossa on takaportteja. Kun tämä pyörii taustalla, saa hiekkalaatikkoon lisättyä omia ominaisuuksia. Kun tuntee ympäristön tarpeeksi hyvin, noita laajennuksia on helppo tehtailla, jos niihin ei ole varauduttu. Tai vaihtoehtoisesti voi käynnistää järjestelmän bugisella kernelillä ja hyödyntää jotain haavoittuvuutta ja saada root-oikeudet lokaalisti ja sen jälkeen hallita järjestelmää. GRUB2-ohjelma on käyttöjärjestelmän lataaja, joka tukee monipuolisia komentosarjoja ja grafiikkatiloja. GRUB2-ohjelman avulla ladataan käyttöjärjestelmän ydin keskusmuistiin, initrd-tiedosto ytimen tiedostojärjestelmäksi muistiin ja lopuksi käynnistetään ladattu ydin. }} Digabi Tweaks -tiimi tutki tätä varsin potentiaaliselta vaikuttanutta mahdollisuutta ja päätyi siihen, että Abitin käynnistyksen yhteydessä järjestelmä voidaan murtaa jopa niin, ettei murtamisesta jää jälkiä. Tämä murtautumiskeino ei ole korjattavissa. Murtautumisessa on käytettävissä kolme toisistaan erillistä keinoa, joita yhdistelemällä saadaan haluttu vaikutus. GRUB2-käynnistyksessä voidaan: # vaihtaa käytetty käyttöjärjestelmän ydin toiseksi etukäteen muokatuksi versioksi, jolloin ytimeen voidaan lisätä tai poistaa ominaisuuksia. Esimerkiksi käyttöoikeuksien tarkastaminen voidaan ohittaa halutuilta osin # vaihtaa käyttöjärjestelmän käynnistämisessä käytetyt komentotiedostot toisiksi. Tällöin voidaan poistaa käytöstä ei-toivottuja ominaisuuksia, kuten esimerkiksi lokien lähettämien koetilan palvelimelle, tai korvata näitä sopivilla uusilla toiminnoilla, kuten esimerkiksi väärennetyn lokitiedon lähettämisellä. Opiskelijan laitteen kovalevy voidaan ottaa kokonaan käyttöön tai sieltä voidaan kopioida sopivia osioita opiskelijan saataville kokeen ajaksi. # ottaa automaattisesti opiskelijan kovalevyllä olevat lisäykset mukaan Digabin tiedostojärjestelmään. Persistence-toiminnolla kovalevylle etukäteen tallennetut tiedostot korvaavat Digabin opiskelijan tikulla olevat tiedostot. Tällöin Digabi-käyttöjärjestelmän käynnistystä voidaa ohjata juuri halutulla tavalla ja lisäksi koejärjestelmään voidaan tuoda haluttuja uusia tiedostoja, vaikkapa opiskelijan luntteja. Näiden menetelmien käyttöä ei voida estää DigabiOS-käyttöjärjestelmässä, koska kaikki kolme menetelmää suoritetaan ennen kuin DigabiOS on käynnistetty. Vain mielikuvitus on rajana siiten, mitä näillä menetelmillä voidaan tehdä. Käyttöjärjestelmän ytimen vaihto Käynnistyksen yhteydessä koneen käynnistäjä ei valitse käyttöjärjestelmän ytimeksi muistitikulla olevaa YTL:n toimittamaa ydintä, vaan oman muokatun version ytimestä. Omalla versiolla käyttöjärjestelmästä voidaan ohittaa halutut suojaukset ja tehdä tarvittaessa mahdollisilta YTL:n asentamilta valvontaohjelmilta piiloutuneena halutut operaatiot. Asentamalla seuraava pätkä tietokoneen kovalevyllä olevaan grub.cfg-tiedostoon saadaan muistitikulla oleva Abitti-koejärjestelmä käynnistymään muokatun Linux-ytimen avulla, joka on tässä tapauksessa /abitti-tweaks/vmlinuz-hack-tiedosto. /boot/grub/grub.cfg menuentry "PC 32bit (vanha/gammal/old)" --unrestricted { insmod part_gpt set root=(hd1,gpt2) linux (hd0,1)/abitti-tweaks/vmlinuz-hack boot=live config boot=live config security=apparmor quiet live-media-path=/live32 initrd /live32/initrd.img } Käyttöjärjestelmän alustustiedostojen vaihto Käyttäjä voi vaihtaa käyttöjärjestelmän alustamisessa käytettävän levykuvan initrd.img }} haluamakseen. Levykuvan sisällön määräämänä käyttöjärjestelmä tekee halutut murtotoimenpiteet järjestelmänkäynnistyksen yhteydessä. Asentamalla seuraava pätkä tietokoneen kovalevyllä olevaan grub.cfg-tiedostoon saadaan muistitikulla oleva abitti-koejärjestelmä käynnistymään väärän levykuvan avulla, joka on tässä tapauksessa /abitti-tweaks/initrd.hack.img-tiedosto. /boot/grub/grub.cfg menuentry "PC 32bit (vanha/gammal/old)" --unrestricted { insmod part_gpt set root=(hd1,gpt2) linux /live32/vmlinuz boot=live config boot=live config security=apparmor quiet live-media-path=/live32 initrd (hd0,1)/abitti-tweaks/initrd.hack.img } Persistence-levyosion käyttö GRUB2-käynistyksessä voidaan käyttöjärjestelmän käynnistysparametrit asettaa uudelleen. Esimerkiksi lisäämällä käynnistykseen parametri persistence saadaan DigabiOS automaattisesti lataamaan normaalien muistitikulla olevien tiedostojen joukkoon oppilaan kovalevyllä sijaitsevasta persistence-levyosiossa olevia tiedostoja. /boot/grub/grub.cfg menuentry "PC 32bit (vanha/gammal/old)" --unrestricted { insmod part_gpt set root=(hd1,gpt2) linux /live32/vmlinuz boot=live config boot=live config security=apparmor quiet live-media-path=/live32 persistence initrd /live32/initrd.img } Persistence-levyosion tiedostojärjestelmä pitää olla ext3- tai ext4-muodossa. Tiedostojärjestelmän juureen lisätään tiedosto /persistence.conf seuraavasti: /persistence.conf /etc union /home union Persistence-ominaisuus on poistettu syksyn 2015 aikana, eikä ole enää uudemmissa abitti-versioissa käytössä. Tämän vuosi persistence-osion kautta tehdyt hyökkäysyritykset eivät enää toimi. Initrd-haavoittuvuus Initrd-haavoittuvuus on yksi tehokkaimmista tavoista murtautua nopeasti järjestelmään. Palaamme tähän tarkemmin lähiaikoina, kunhan olemme saaneet yksityiskohdat selville Suomen Kuvalehden 49/2016 artikkelin perusteella. Squasfs-haavoittuvuus Squasfs-haavoittuvuudessa opiskelija muuttaa opiskelijan tikulla olevaa käyttöjärjestelmää siten, että lunttaaminen on mahdollista kokeen aikana. Squashfs-haavoittuvuus mahdollistaa hyväksikäytön lukemattomilla eri tavoilla. Yksinkertaisimmillaan käyttöjärjestelmän yhteyteen talleteaan lunttitiedostoja, mutta tämä haavoittuvuus mahdollistaa helpon keinon ottaa vaikkapa WLAN-yhteys käyttöön kokeen aikana. Wlan verkon kautta vodaan lähettäää viestejä koetilan ulkopuolelle tai käyttää verkon hakukoneita tiedon löytämiseen. Seuraavalla yksinkertaisella komentosekvenssillä saadaan tehtyä häkkeröity abitti normaalista abitista linuxissa: Opiskelijan tikun murtaminen unsquashfs /media/$USER/ABITTIxxx/live/filesystem.squashfs echo "new_root::0:0:root:/root:/bin/bash" >> squashfs-root/etc/passwd rm -f /media/$USER/ABITTIxxxx/live/filesystem.squashfs mksquashfs squashfs-root /media/$USER/ABITTIxxx/live/filesystem.squashfs Edellä olevassa lisättiin tikulle uusi admistraattorin tunnus ilman salasanaa, vaihtamalla echo-rivin tilalle sopivat komennot voidaan tikulle tehdä mitä tahansa haluttuja toimenpiteitä. Ylioppilaskirjoituksissa opiskelijan tikun sisältö julkaistaan noin viikkoa ennen kirjoituksia. Tällöin kokelaalla on viikko aikaa tutkia ja muokata tikun sisältöä ja tallettaa muokattu sisältö vaikkapa miniatyyrikokoiselle USB-tikulle (esim https://www.verkkokauppa.com/fi/product/42904 ). Koetilanteessa Abitti voidaan käynnistää tältä huomaamattomalta USB-muistilta kirjoituksissa jaettavan muistitikun sijasta. Suojautuminen valvonnalta Abitti-järjestelmässä on kolme valvontamenetelmää käytössä. Nämä valvontamenetelmät täytyy kiertää tai lähettää niiden kautta väärennettyä tietoa, jos haluaa välttyä jättämästä väärän käytön aiheuttamia jälkiä todisteeksi. Järjestelmälokien lähetys koetilan palvelimelle Järjestelmälokien lähetys tapahtuu rsyslog-ohjelmalla ja konfugurointi on tiedostossa /etc/rsyslog.d/digabi. Koetilan valvontajärjestelmä "nsa" Koetilan valvontajärjestelmä on nimeltään NSA ja se löytyy hakemistosta /var/lib/digabi-koe/server. Järjestelmä on kirjoitettu Javascriptillä, ja se suoritaa koetilan palvelimelta lähetettyjä komentosarjoja. Komentosarjojen tulokset lähetetään takaisin koetilan palvelimelle. Ylioppilaskokeiden lisävalvonta Ylioppilaskokeissa on kolmas valvontajärjestelmä, jota emme tässä käsittele sen tarkemmin. Tämä kolmas valvontajärjestelmä ei ole käytössä normaaleissa abitti-kurssikokeissa. Muita tapoja PCI mikrokontrolleri J. Seppänen Facebookissa Virtualisoinnin tunnistaminenkaan ei riitä, jos vastapuoli pääsee valmistelemaan laitteen. Läppärin sisälle voisi piilottaa mikrokontrollerin, jolla on PCI-väylän kautta pääsy koneen muistiin prosessorin ohi. Serverilaitteissa tällaisia on valmiina esim. nimellä IPMI, ja taitaa joissakin työasemissakin olla Intelin AMT. Voisi olla hauska harjoitus jollekulle hakkerille ohjelmoida jokin tällainen auttamaan kirjoituksissa. Kahdennettu läppäri Helsingin Sanomat kuvasi 24.8.2013 julkaistussa artikkelissa yleisellä tasolla ideoita virtualikoneesta ja kahdennetuista läppäristä. Elektroniikka on jo niin pientä, että keskikokoisen kannettavan kuoriin mahtuisi kaksi eri tietokonetta. Niitä voisi käyttää samalla näytöllä ja näppäimistöllä. Yhdellä koneella oppilas käyttäisi yo-koeohjelmaa ja toisella lunttaisi tietoa. Tavalliseen tietokoneeseen voi käynnistää myös virtuaalikoneen, jolloin lopputulos on käytännössä lähes sama. On kuitenkin menetelmiä, joilla ohjelma voi yrittää päätellä, toimiiko se virtuaalikoneessa – ja kieltäytyä toimimasta, jos näin on. Taitava oppilas taas voi ottaa käyttöön vastamenetelmiä, jotka peittävät näitä jälkiä. Käsistään näppärä harrastaja voi hankkia vanhan isokokoisen läppärin ja muokkata sen sisäosia. Läppärin sisään laitetaan kaksi erillistä konetta, esimerkiksi pienikokoinen Raspberry Pi 3G-modeemilla varustettuna ja normaali Windows-kone Abitti-käyttöön. Näyttö ja näppäimistö on kytketty sisäiseen KVM-kytkimeen, jolloin kokelas voi vaihdella vapaasti näiden kahden koneen välillä. Kaikki tarvittavat osat ovat vapaasti saatavilla ja maksavat yhteensä vain joitakin satoja euroja. Tämän menetelmän etuna on se, ettei sitä voi mitenkään sähköisillä järjestelmillä havaita, koska Abitti-järjestelmään tai siihen liittyvään tietokoneeseen ei ole tehty mitään muutoksia. Rinnalla on vain näkymättömissä toinen kone, jolla tiedonhaku voidaan toteuttaa. Virtuaalikone Idea virtuaalikoneiden käyttämisestä hyökkäyksiin syntyi Abitti-webinaareista, joissa YTL käyttää virtuaalikoneita Abitin toiminnan esittelyyn. Virtuaalikone on ohjelma, jonka avulla jotain muuta käyttöjärjestelmää voidaan ajaa normaalin käyttöjärjestelmän päällä. Helppo tapa tunnistaa, ajetaanko käyttöjärjestelmää virtuaalikoneessa, on käyttää Linuxin virtwhat-komentoa. On oletettavaa, että myös YTL tulee tunnistamaan yritykset ajaa Digabia virtuaalikoneessa virtwhat-komennolla (tai muulla vastaavalla ohjelmalla). Komennon toiminta perustuu siihen, että se havaitsee virtuaalikoneen "sormenjäljen" käyttöympäristössään. Helppo tapa saada virtwhat olemaan havaitsematta virtuaalikoneen käyttöä on ottaa avoimen lähdekoodin virtuaalikone käyttöön ja muokata sitä juuri sen verran, ettei virtwhat enää tunnista muuttunutta virtuaalikonetta. Virtuaalikonetta käytettäessä opiskelija vastaa koekysymyksiin virtuaalikoneessa toimivassa koejärjestelmässä ja pääsee käsiksi haluamaansa aineistoon normaalin käyttöjärjestelmän alaisuudessa. Morsetusta äänikortin avulla Hackabi-kilpailussa eräs innovatiivinen ratkaisu oli Juha Koiviston idea viestinvaihdosta kahden kokelaan välillä käyttämällä äänikorttia ja morsetusta. Tämä reikä lienee tukittu nykyisissä abitin versioissa.http://www.juhakoivisto.com/pdf/digabiHack.pdf Viestinvaihto WLAN-verkon SSID:n avulla Nimimerkki AirZero kysyi Digabi-sivustolla : Mietityttää tuo kuvassa oleva wlanin valinta? Onko lähellä olevat wlanit mahdollista nähdä myös ylioppilaskokeiden aikana? Wlanin nimeä muuttamallahan voi viestittää suoraan salissa istujille. Tämä on todella hieno ajatus viestinvaihtoon! WLAN-tukiasemien nimien (=SSID) avulla voidaan todellakin lähettää 32 merkkiä pitkiä viestejä koetilan ulkopuolelta kokelaalle. Myös pienimuotoinen viestinlähetys kokelaalta ulkopuolella olevaan tukiasemaan onnistuu WLAN-salausavaimen avulla. Kokelas voi kysyä apua koetilan ulkopuolella olevalta kaverilta lähettämällä kysymyksensä ulkopuolisen WLAN-verkon salausavain-kentässä, ja saada sitten vastauksen SSID-tekstinä. Abitti-järjestelmän palomuurit eivät estä tätä kommunikointimenettelyä, ja koetilan ulkopuolella olevan WLAN-tukiaseman ei tarvitse kuin näyttää avustavalle kaverille tukiasemaan tulleiden yhteyspyyntöjen salausavaimet selväkielisinä. Äärimmäisen helppoa! Nimihuijaus kurssikokeissa Ylioppilaslautakunnan Digabi-tiimiussä aiemmin toiminut ohjelmistokehittäjä Janne Cederberg esittelee omilla webbisivuillaan menetelmän, jossa kaksi opiskelijaa voivat huijata vastaamaalla toistensa nimissä abitti-kurssikokeissa. Menetelmä ei toimi sähköisissä ylioppilaskirjoituksissa. Linkki Jannen sivulle: http://jannecederberg.fi/2016/02/18/nimihuijaus-abitti-kurssikokeessa/ Esimerkkivideo Sivulla Abitin murtaminen on 8 minuuttia kestävä esimerkkivideo siitä, miten edellä kuvatuilla hyväksikäyttömenetelmillä voidaan murtaa Abitti-kurssikokeen suojaukset, siirtää luntteja koeympäristöön ja avata netti tiedonhakua varten. Ohjeet Abitin tutkimiseen Abitin ominaisuuksien tutkiminen on mielenkiintoista ja opettavaista puuhaa. Ominaisuuksien tutkimisessa ei ole mitään lain tai edes hyvän tavan vastaista. Tutkiminen tapahtuu parhaiten asentamalla ensiksi omalle tietokoneelle Linux-käyttöjärjestelmä, vaikkapa olemassa olevan käyttöjärjestelmän rinnalla. Koetilan palvelimen (KPT) tutkiminen Vinkit koetilan palvelimen rakenteen ja ominaisuuksien tutkimiseen on annettu sivulla Koetilan palvelimen tutkiminen. Opiskelijan koneen tutkiminen Vinkit opiskelijan koneen rakenteen ja ominaisuuksien tutkimiseen on annettu sivulla Opiskelijan koneen tutkiminen. Lähteet ja viitteet Luokka:Digabi Luokka:Abitti